iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 8
1
Modern Web

從零開始的點餐系統,Google好棒棒系列 第 8

[Day8] 變數宣告&Function

  • 分享至 

  • xImage
  •  

在昨天講了一個檔案裡最重要的幾個元件後
今天來講寫程式最基礎的變數宣告以及Function使用方法

變數

Go的變數宣告方式有點特別

方法1: 自動定義型別

最簡單也最常見的宣告方式如下

這跟JavaScript宣告方式大致上一樣

var i = 1; 

如果不透過型別他會自動在設定值的同時賦予型別上去(上述的例子就是自動變成int)

如果不給給值系統會給預設值

  • Boolean : false
  • Number : 0
  • Strign : ""
  • function,interface,slice,channel, map : nil

nil相當於物件的null 他本身也是一種型別

方法2: 手動定義型別

這跟第一種很類似 差異在於自定義型別

var x, y int = 3, 4

型別清單可以參考官網的文件

Go的特色還有可以一次宣告多個(你有20個變數 = 後面就可以有20個值)

方法3: 簡短宣告 鬼畫符版本

這是Go最特別也是最潮的地方

寫習慣C#或是Java的我來看會覺得是鬼畫符/images/emoticon/emoticon06.gif

x := 1

b := float64(3.51)

這樣的寫法可以連var都省略了 而且又讓寫別的語言的人看不懂
顯得自己很強
不過這也是大家最常宣告的方式 因為他可以直接接方法當作變數的承接值(後面會提到)

如何判定型別

可以透過Go原生的套件reflect這個套件來查詢變數所代表的型別

package main

import (
	"fmt"
	"reflect"
)

func main() {
	var i = 1
	fmt.Println(reflect.TypeOf(i))
}

// OutPut => int

Function(方法)

作用域

如昨天所提到的在Function裡面有個特性

首字大小寫代表Public或是Private

package main

import (
	"fmt"
)

func main() {
	PublicTest()
	privateTest()
}

func PublicTest() {
	fmt.Println("PublicTest")
}

func privateTest() {
	fmt.Println("PrivateTest")
}

// OutPut => PublicTest
// OutPut => PrivateTest

依照上面這個例子 雖然兩個方法都有辦法成功執行
但今天如果其他的檔案參考Main這個函示庫
就會無法使用privateTest這個方法

回傳變數

方法1:宣告回傳參數的種類

package main

import (
	"fmt"
)

func main() {
	answer := add(1, 2)
	fmt.Println(answer)
}

func add(x, y int) int {
	return x + y
}

// OutPut => 3

方法2: 宣告回傳多個參數的種類

package main

import (
	"fmt"
)

func main() {
	answer1, answer2 := add(1, 2)
	fmt.Println(answer1)
	fmt.Println(answer2)
}

func add(x, y int) (int, int) {
	return x + y, x * y
}

// OutPut => 3
// OutPut => 2

方法3: 直接宣告回傳變數並賦值

package main

import (
	"fmt"
)

func main() {
	answer := add(1, 2)
	fmt.Println(answer)
}

func add(x, y int) (z int) {
	z = x + y
	return
}

// OutPut => 3

結語

寫了這麼多種寫法,在Go的世界裡都可以執行
差別在於團隊習慣的用法而已 只要溝通好就都能使用/images/emoticon/emoticon12.gif


上一篇
[Day7] Go Lang建置
下一篇
[Day9] If、Switch、Defer
系列文
從零開始的點餐系統,Google好棒棒30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言